import { User } from 'oidc-client-ts';

export class UserInfo {
  date: string;
  user: User;
  // token 有效期时间
  expiresIn: number;

  constructor(newUser: User) {
    // 创建一个表示当前时间的 Date 对象（这会自动是用户的本地时间）
    const now = new Date();
    // 使用 toISOString() 方法将日期转换为 UTC 格式的 ISO 8601 字符串
    const utcString = now.toISOString();
    this.date = utcString;
    this.user = newUser;
    this.expiresIn = newUser.expires_in || -1;
  }

  public static fromJson(json: string): UserInfo | null {
    if (this.isNullOrEmpty(json)) {
      return null;
    }
    return JSON.parse(json) as UserInfo;
  }

  private static isNullOrEmpty(str: string) {
    return str === null || str === undefined || str.trim() === '';
  }

  private static diffInSeconds(date1: Date, date2: Date): number {
    // 确保 date1 在 date2 之前，否则交换它们
    if (date1 > date2) {
      [date1, date2] = [date2, date1];
    }

    // 获取两个日期的毫秒数
    const diffInMilliseconds = date2.getTime() - date1.getTime();

    // 将毫秒数转换为秒数
    const diffInSeconds = Math.floor(diffInMilliseconds / 1000);

    return diffInSeconds;
  }

  public static isValid(userInfo: UserInfo): boolean {
    if (UserInfo.isNullOrEmpty(userInfo.date)) {
      return false;
    }

    // 使用new Date()构造函数将字符串转换回Date对象
    const utcDate = new Date(userInfo.date);
    const now = new Date();
    const seconds: number = UserInfo.diffInSeconds(utcDate, now);

    // 判断时间是否过期
    if (seconds >= userInfo.expiresIn) {
      return false;
    } else {
      return true;
    }
  }
}
